#pragma once
#include <libxml/parser.h>
#include <libxml/tree.h>
class XMLDataExchange
{
public:
	XMLDataExchange();
	~XMLDataExchange();
	int OpenXML(const string& strFileName);
	int xmlGetProValue(const string &name, string& strValue) const;
	int xmlGetProValue(const string &name, int & iValue) const;
	int xmlGetProValue(const string &name, bool & bValue) const;
	int xmlGetProValue(const string &name, double & dValue) const;

	int xmlGetContentValue(const string &name, string& strValue) const;
	int xmlGetContentValue(const string &name, int & iValue) const;
	int xmlGetContentValue(const string &name, bool & bValue) const;
	int xmlGetContentValue(const string &name, double & dValue) const;

	
	int xmlSetProValue(const string &name, string& strValue) ;
	int xmlSetProValue(const string &name, int & iValue) ;
	int xmlSetProValue(const string &name, bool & bValue) ;
	int xmlSetProValue(const string &name, double & dValue) ;

	int xmlSetContentValue(const string &name, string& strValue) ;
	int xmlSetContentValue(const string &name, int & iValue) ;
	int xmlSetContentValue(const string &name, bool & bValue) ;
	int xmlSetContentValue(const string &name, double & dValue) ;

	inline void MoveToNext()
	{
		m_pNode = m_pNode->next;
	}

	inline void MoveToChild()
	{
		m_pNode = m_pNode->children;
	}
	
	inline void Clear()
	{
		if (m_pNode)
		{
			xmlFreeNode(m_pNode);
			m_pNode = NULL;
		}
		if (m_pDoc)
		{
			xmlFreeDoc(m_pDoc); m_pDoc = NULL;
		}

	}
protected:
	xmlNodePtr m_pNode;
	xmlDocPtr m_pDoc;
};

